<?php
$iconos="./"; 
$can_view_source=true;
$can_edit=true;
$can_delete=true;
$can_download=false;
$can_explore=true;
$can_explore_up=true;

if(file_exists("autentifica.php")){
  require_once("autentifica.php");
}

function str_make_editable($contents) {
  $contents = str_replace("&","&amp;",$contents);
  $contents = str_replace("<","&lt;",$contents);
  return $contents;
}

function str_restore_edited($contents){
  $contents = str_replace("\\\\","\\",$contents);
  $contents = str_replace("\\\"","\"",$contents);
  $contents = str_replace("\\'","'",$contents);
  return $contents;
}

function xhtmlHighlightString($str,$return=false) {
  $hlt = highlight_string($str, true);
  $fon = str_replace(array('<font ', '</font>'), array('<span ', '</span>'), $hlt);
  $ret = preg_replace('#color="(.*?)"#', 'style="color: \\1"', $fon);
  if($return)
    return $ret;
  echo $ret;
  return true;
}

$exploring=".";
if ($can_explore) {
  // se fija si el path que el usuario trata de visualizar est� o no dentro del permitido.
  
  $try=empty($_GET["dir"])?".":$_GET["dir"];
  
  $realtry = realpath($try);
  $realtry = str_replace("\\","/",$realtry);
  $dirlen = strlen($realtry)-strlen(realpath("."));
    
  if (strpos(realpath($try),realpath("."))===false && !$can_explore_up){
    echo "<font size=1 face='Verdana,Arial,Helvetica' color=red>No se puede examinar el servidor!</font><br><br>";
    $exploring = ".";
  } 
  
  if(strpos(realpath($try),realpath("."))===false && $can_explore_up) {
    //explorando fuera del tree (../)
    $exploring = $realtry;
  }
  
  if(!(strpos(realpath($try),realpath("."))===false)) {
    //explorando en el tree
    $exploring = substr($realtry,-$dirlen);
    $exploring = $exploring{0}=="/"?substr($exploring, 1):$exploring;
    if($dirlen==0) $exploring = ".";
  }
}

$exploring = substr($exploring,-1)=="/"?substr($exploring, 0, -1):$exploring;

if($_GET["action"]=="delete" && $can_delete){
    unlink($exploring."/".$_GET["file"]);
}elseif($_GET["action"]=="view" && $can_view_source){
    echo '<div style="border: solid 1px orange; padding: 20px; margin: 20px; font-size:12">';
    $contents = implode(file($exploring."/".$_GET["file"]));
    xhtmlHighlightString($contents);
    echo '</div><br><br>';
}elseif($_GET["action"]=="download" && $can_download){
    header('Content-type: octet/attachment');
    $fd = fopen($exploring."/".$_GET["file"],"r");
    $image=fread($fd,filesize($exploring."/".$_GET["file"]));
    fclose ($fd);
    echo($image);
    exit;
}elseif($_GET["action"]=="edit" && $can_edit){
    if(strpos(realpath($_GET["file"]),realpath("."))===false && (!$can_explore_up || !$can_explore)) {
        echo "<font size=1 face='Verdana,Arial,Helvetica' color=red>No se puede examinar el servidor!</font><br><br>";
    } else {
        echo "<form method='post' action='?".($can_explore?("dir=$exploring&"):"")."file=".$exploring."/".$_GET["file"]."&action=save'><textarea name='data' rows=35 cols=210 style=\"{font-family:Tahoma; font-size:9}\">";
        $contents = implode(file($exploring."/".$_GET["file"]));
        $contents = str_make_editable($contents);  //reemplazar los tags no imprimibles como </textarea>
        echo $contents;
        echo "</textarea><br><input type=submit value='Guardar'></form><br>";
    }
}elseif($_GET["action"]=="save" && $can_edit){
    if(strpos(realpath($_GET["file"]),realpath("."))===false && (!$can_explore_up || !$can_explore)) {
        echo "<font size=1 face='Verdana,Arial,Helvetica' color=red>No se puede examinar el servidor!</font><br><br>";
    } else {
    $fd = fopen($_GET["file"],"w");
    $data = str_restore_edited($_POST["data"]);
    fwrite($fd,$data);
    fclose ($fd);
    }
}

?>

<body bgcolor="#FFFFFF">

<div style="border: solid 1px orange; padding: 20px; margin: 20px; font-size:12">
<font size=1 face="Verdana,Arial,Helvetica">
<br>

<?php

$dir=opendir($exploring);
echo "<b>Listado del directorio '".$exploring."'</b><br><br>\n"; ?>
<table border=0 >
<?php
while ($archivo = readdir($dir)) { 
  if ($archivo!=".") {
    echo "<tr>\n";
    $flag=false;
    $size=filesize($exploring."/".$archivo);
    if (is_dir ($exploring."/".$archivo)) { echo "<td width=10><img src=\"" . $iconos . "dir.gif\"></td>\n<td>"; $flag=true; }

    if (substr(strtoupper($archivo),-4)==".EXE") { echo "<td><img src=\"" . $iconos . "exe.gif\"></td><td>"; $flag=true; }
    if (substr(strtoupper($archivo),-4)==".ZIP") { echo "<td><img src=\"" . $iconos . "zip.gif\"></td><td>"; $flag=true; }
    if (substr(strtoupper($archivo),-4)==".TGZ") { echo "<td><img src=\"" . $iconos . "zip.gif\"></td><td>"; $flag=true; }
    if (substr(strtoupper($archivo),-3)==".GZ")  { echo "<td><img src=\"" . $iconos . "zip.gif\"></td><td>"; $flag=true; }
    if (substr(strtoupper($archivo),-4)==".JPG") { echo "<td><img src=\"" . $iconos . "jpg.gif\"></td><td>"; $flag=true; }
    if (substr(strtoupper($archivo),-4)==".GIF") { echo "<td><img src=\"" . $iconos . "gif.gif\"></td><td>"; $flag=true; }
    if (substr(strtoupper($archivo),-4)==".BMP") { echo "<td><img src=\"" . $iconos . "bmp.gif\"></td><td>"; $flag=true; }

    if ($flag==false) { echo "<td><img src=\"" . $iconos . "file.gif\"></td>\n<td>"; }

    if (is_dir($exploring."/".$archivo)) { 
   	  if($can_explore) { 
   	   	echo "&nbsp;<a href=\"?dir=$exploring/$archivo\"><font size=1>$archivo</font></a></td>\n<td>&nbsp;</td>\n";
   	   	echo "<td>&nbsp;<a href=\"$exploring/$archivo\"><font size=1>abrir</font></a></td>\n";
   	  } else {
   	   	echo "&nbsp;<a href=\"$exploring/$archivo\"><font size=1>$archivo</font></a></td>\n<td>&nbsp;</td>\n";
   	  }
      echo "</tr>\n"; 
    } else { 
      echo "&nbsp;<a href=\"$exploring/$archivo\"><font size=1>$archivo</font></a></td>\n<td align=right>&nbsp;<font size=1>$size bytes</font></td>\n";
      if ($can_view_source) echo "<td>&nbsp;<a href=\"?".($can_explore?("dir=$exploring&"):"")."file=$archivo&action=view\"><font size=1>ver</font></a></td>\n";
      if ($can_edit) echo "<td>&nbsp;<a href=\"?".($can_explore?("dir=$exploring&"):"")."file=$archivo&action=edit\"><font size=1>editar</font></a></td>\n";
      if ($can_download) echo "<td>&nbsp;<a href=\"?".($can_explore?("dir=$exploring&"):"")."file=$archivo&action=download\"><font size=1>descargar</font></a></td>\n";
      if ($can_delete) echo "<td>&nbsp;<a href=\"?".($can_explore?("dir=$exploring&"):"")."file=$archivo&action=delete\"><font size=1>borrar</font></a></td>\n";
      echo "</tr>\n"; 
    }
  }
}

closedir($dir); 

echo "<tr>\n<td colspan=3><font size=1><br>Espacio total: ".disk_total_space(".")." bytes.</font></td>\n</tr>";
echo "<tr>\n<td colspan=3><font size=1>Espacio disponible: ".disk_free_space(".")." bytes.</font></td>\n</tr>";

?></table>
</font>
</div>
</body>